home *** CD-ROM | disk | FTP | other *** search
/ 9-Digit Zip Code Directory / 9-Digit Zip Code Directory (American Business Information) (ABIZIP-12).ISO / z4src.zip / TOOLHELP.H < prev    next >
C/C++ Source or Header  |  1993-11-23  |  15KB  |  470 lines

  1. /*****************************************************************************\
  2. *                                                                             *
  3. * toolhelp.h -  toolhelp.dll functions, types, and definitions                *
  4. *                                                                             *
  5. *               Version 1.0                                                   *
  6. *                                                                             *
  7. *               NOTE: windows.h must be #included first                       *
  8. *                                                                             *
  9. *               Copyright (c) 1992, Microsoft Corp.  All rights reserved.     *
  10. *                                                                             *
  11. \*****************************************************************************/
  12.  
  13. #ifndef _INC_TOOLHELP
  14. #define _INC_TOOLHELP
  15.  
  16. #ifndef RC_INVOKED
  17. #pragma pack(1)         /* Assume byte packing throughout */
  18. #endif
  19.  
  20. #ifdef __cplusplus
  21. extern "C" {            /* Assume C declarations for C++ */
  22. #endif    /* __cplusplus */
  23.  
  24. #ifndef _INC_WINDOWS    /* If included with 3.0 headers... */
  25. #define LPCSTR      LPSTR
  26. #define WINAPI      FAR PASCAL
  27. #define CALLBACK    FAR PASCAL
  28. #define UINT        WORD
  29. #define HMODULE     HANDLE
  30. #define HINSTANCE   HANDLE
  31. #define HLOCAL      HANDLE
  32. #define HGLOBAL     HANDLE
  33. #define HTASK       HANDLE
  34. #endif  /* _INC_WINDOWS */
  35.  
  36. /****** General symbols ******************************************************/
  37. #define MAX_DATA        11
  38. #define MAX_PATH        255
  39. #define MAX_MODULE_NAME 8 + 1
  40. #define MAX_CLASSNAME   255
  41.  
  42. /****** Global heap walking ***************************************************/
  43. typedef struct tagGLOBALINFO
  44. {
  45.     DWORD dwSize;
  46.     WORD wcItems;
  47.     WORD wcItemsFree;
  48.     WORD wcItemsLRU;
  49. } GLOBALINFO;
  50.  
  51. typedef struct tagGLOBALENTRY
  52. {
  53.     DWORD dwSize;
  54.     DWORD dwAddress;
  55.     DWORD dwBlockSize;
  56.     HGLOBAL hBlock;
  57.     WORD wcLock;
  58.     WORD wcPageLock;
  59.     WORD wFlags;
  60.     BOOL wHeapPresent;
  61.     HGLOBAL hOwner;
  62.     WORD wType;
  63.     WORD wData;
  64.     DWORD dwNext;
  65.     DWORD dwNextAlt;
  66. } GLOBALENTRY;
  67.  
  68. /* GlobalFirst()/GlobalNext() flags */
  69. #define GLOBAL_ALL      0
  70. #define GLOBAL_LRU      1
  71. #define GLOBAL_FREE     2
  72.  
  73. /* GLOBALENTRY.wType entries */
  74. #define GT_UNKNOWN      0
  75. #define GT_DGROUP       1
  76. #define GT_DATA         2
  77. #define GT_CODE         3
  78. #define GT_TASK         4
  79. #define GT_RESOURCE     5
  80. #define GT_MODULE       6
  81. #define GT_FREE         7
  82. #define GT_INTERNAL     8
  83. #define GT_SENTINEL     9
  84. #define GT_BURGERMASTER 10
  85.  
  86. /* If GLOBALENTRY.wType==GT_RESOURCE, the following is GLOBALENTRY.wData: */
  87. #define GD_USERDEFINED      0
  88. #define GD_CURSORCOMPONENT  1
  89. #define GD_BITMAP           2
  90. #define GD_ICONCOMPONENT    3
  91. #define GD_MENU             4
  92. #define GD_DIALOG           5
  93. #define GD_STRING           6
  94. #define GD_FONTDIR          7
  95. #define GD_FONT             8
  96. #define GD_ACCELERATORS     9
  97. #define GD_RCDATA           10
  98. #define GD_ERRTABLE         11
  99. #define GD_CURSOR           12
  100. #define GD_ICON             14
  101. #define GD_NAMETABLE        15
  102. #define GD_MAX_RESOURCE     15
  103.  
  104. /* GLOBALENTRY.wFlags */
  105. #define GF_PDB_OWNER        0x0100      /* Low byte is KERNEL flags */
  106.  
  107. BOOL    WINAPI GlobalInfo(GLOBALINFO FAR* lpGlobalInfo);
  108. BOOL    WINAPI GlobalFirst(GLOBALENTRY FAR* lpGlobal, WORD wFlags);
  109. BOOL    WINAPI GlobalNext(GLOBALENTRY FAR* lpGlobal, WORD wFlags);
  110. BOOL    WINAPI GlobalEntryHandle(GLOBALENTRY FAR* lpGlobal, HGLOBAL hItem);
  111. BOOL    WINAPI GlobalEntryModule(GLOBALENTRY FAR* lpGlobal, HMODULE hModule, WORD wSeg);
  112. WORD    WINAPI GlobalHandleToSel(HGLOBAL hMem);
  113.  
  114. /****** Local heap walking ***************************************************/
  115.  
  116. typedef struct tagLOCALINFO
  117. {
  118.     DWORD dwSize;
  119.     WORD wcItems;
  120. } LOCALINFO;
  121.  
  122. typedef struct tagLOCALENTRY
  123. {
  124.     DWORD dwSize;
  125.     HLOCAL hHandle;
  126.     WORD wAddress;
  127.     WORD wSize;
  128.     WORD wFlags;
  129.     WORD wcLock;
  130.     WORD wType;
  131.     WORD hHeap;
  132.     WORD wHeapType;
  133.     WORD wNext;
  134. } LOCALENTRY;
  135.  
  136. /* LOCALENTRY.wHeapType flags */
  137. #define NORMAL_HEAP     0
  138. #define USER_HEAP       1
  139. #define GDI_HEAP        2
  140.  
  141. /* LOCALENTRY.wFlags */
  142. #define LF_FIXED        1
  143. #define LF_FREE         2
  144. #define LF_MOVEABLE     4
  145.  
  146. /* LOCALENTRY.wType */
  147. #define LT_NORMAL                   0
  148. #define LT_FREE                     0xff
  149. #define LT_GDI_PEN                  1   /* LT_GDI_* is for GDI's heap */
  150. #define LT_GDI_BRUSH                2
  151. #define LT_GDI_FONT                 3
  152. #define LT_GDI_PALETTE              4
  153. #define LT_GDI_BITMAP               5
  154. #define LT_GDI_RGN                  6
  155. #define LT_GDI_DC                   7
  156. #define LT_GDI_DISABLED_DC          8
  157. #define LT_GDI_METADC               9
  158. #define LT_GDI_METAFILE             10
  159. #define LT_GDI_MAX                  LT_GDI_METAFILE
  160. #define LT_USER_CLASS               1   /* LT_USER_* is for USER's heap */
  161. #define LT_USER_WND                 2
  162. #define LT_USER_STRING              3
  163. #define LT_USER_MENU                4
  164. #define LT_USER_CLIP                5
  165. #define LT_USER_CBOX                6
  166. #define LT_USER_PALETTE             7
  167. #define LT_USER_ED                  8
  168. #define LT_USER_BWL                 9
  169. #define LT_USER_OWNERDRAW           10
  170. #define LT_USER_SPB                 11
  171. #define LT_USER_CHECKPOINT          12
  172. #define LT_USER_DCE                 13
  173. #define LT_USER_MWP                 14
  174. #define LT_USER_PROP                15
  175. #define LT_USER_LBIV                16
  176. #define LT_USER_MISC                17
  177. #define LT_USER_ATOMS               18
  178. #define LT_USER_LOCKINPUTSTATE      19
  179. #define LT_USER_HOOKLIST            20
  180. #define LT_USER_USERSEEUSERDOALLOC  21
  181. #define LT_USER_HOTKEYLIST          22
  182. #define LT_USER_POPUPMENU           23
  183. #define LT_USER_HANDLETABLE         32
  184. #define LT_USER_MAX                 LT_USER_HANDLETABLE
  185.  
  186. BOOL    WINAPI LocalInfo(LOCALINFO FAR* lpLocal, HGLOBAL hHeap);
  187. BOOL    WINAPI LocalFirst(LOCALENTRY FAR* lpLocal, HGLOBAL hHeap);
  188. BOOL    WINAPI LocalNext(LOCALENTRY FAR* lpLocal);
  189.  
  190. /****** Stack Tracing ********************************************************/
  191.  
  192. typedef struct tagSTACKTRACEENTRY
  193. {
  194.     DWORD dwSize;
  195.     HTASK hTask;
  196.     WORD wSS;
  197.     WORD wBP;
  198.     WORD wCS;
  199.     WORD wIP;
  200.     HMODULE hModule;
  201.     WORD wSegment;
  202.     WORD wFlags;
  203. } STACKTRACEENTRY;
  204.  
  205. /* STACKTRACEENTRY.wFlags values */
  206. #define FRAME_FAR       0
  207. #define FRAME_NEAR      1
  208.  
  209. BOOL    WINAPI StackTraceFirst(STACKTRACEENTRY FAR* lpStackTrace, HTASK hTask);
  210. BOOL    WINAPI StackTraceCSIPFirst(STACKTRACEENTRY FAR* lpStackTrace,
  211.             WORD wSS, WORD wCS, WORD wIP, WORD wBP);
  212. BOOL    WINAPI StackTraceNext(STACKTRACEENTRY FAR* lpStackTrace);
  213.  
  214. /****** Module list walking **************************************************/
  215.  
  216. typedef struct tagMODULEENTRY
  217. {
  218.     DWORD dwSize;
  219.     char szModule[MAX_MODULE_NAME + 1];
  220.     HMODULE hModule;
  221.     WORD wcUsage;
  222.     char szExePath[MAX_PATH + 1];
  223.     WORD wNext;
  224. } MODULEENTRY;
  225.  
  226. BOOL    WINAPI ModuleFirst(MODULEENTRY FAR* lpModule);
  227. BOOL    WINAPI ModuleNext(MODULEENTRY FAR* lpModule);
  228. HMODULE WINAPI ModuleFindName(MODULEENTRY FAR* lpModule, LPCSTR lpstrName);
  229. HMODULE WINAPI ModuleFindHandle(MODULEENTRY FAR* lpModule, HMODULE hModule);
  230.  
  231. /****** Task list walking *****************************************************/
  232.  
  233. typedef struct tagTASKENTRY
  234. {
  235.     DWORD dwSize;
  236.     HTASK hTask;
  237.     HTASK hTaskParent;
  238.     HINSTANCE hInst;
  239.     HMODULE hModule;
  240.     WORD wSS;
  241.     WORD wSP;
  242.     WORD wStackTop;
  243.     WORD wStackMinimum;
  244.     WORD wStackBottom;
  245.     WORD wcEvents;
  246.     HGLOBAL hQueue;
  247.     char szModule[MAX_MODULE_NAME + 1];
  248.     WORD wPSPOffset;
  249.     HANDLE hNext;
  250. } TASKENTRY;
  251.  
  252. BOOL    WINAPI TaskFirst(TASKENTRY FAR* lpTask);
  253. BOOL    WINAPI TaskNext(TASKENTRY FAR* lpTask);
  254. BOOL    WINAPI TaskFindHandle(TASKENTRY FAR* lpTask, HTASK hTask);
  255. DWORD   WINAPI TaskSetCSIP(HTASK hTask, WORD wCS, WORD wIP);
  256. DWORD   WINAPI TaskGetCSIP(HTASK hTask);
  257. BOOL    WINAPI TaskSwitch(HTASK hTask, DWORD dwNewCSIP);
  258.  
  259. /****** Window Class enumeration **********************************************/
  260.  
  261. typedef struct tagCLASSENTRY
  262. {
  263.     DWORD dwSize;
  264.     HMODULE hInst;              /* This is really an hModule */
  265.     char szClassName[MAX_CLASSNAME + 1];
  266.     WORD wNext;
  267. } CLASSENTRY;
  268.  
  269. BOOL    WINAPI ClassFirst(CLASSENTRY FAR* lpClass);
  270. BOOL    WINAPI ClassNext(CLASSENTRY FAR* lpClass);
  271.  
  272. /****** Information functions *************************************************/
  273.  
  274. typedef struct tagMEMMANINFO
  275. {
  276.     DWORD dwSize;
  277.     DWORD dwLargestFreeBlock;
  278.     DWORD dwMaxPagesAvailable;
  279.     DWORD dwMaxPagesLockable;
  280.     DWORD dwTotalLinearSpace;
  281.     DWORD dwTotalUnlockedPages;
  282.     DWORD dwFreePages;
  283.     DWORD dwTotalPages;
  284.     DWORD dwFreeLinearSpace;
  285.     DWORD dwSwapFilePages;
  286.     WORD wPageSize;
  287. } MEMMANINFO;
  288.  
  289. BOOL    WINAPI MemManInfo(MEMMANINFO FAR* lpEnhMode);
  290.  
  291. typedef struct tagSYSHEAPINFO
  292. {
  293.     DWORD dwSize;
  294.     WORD wUserFreePercent;
  295.     WORD wGDIFreePercent;
  296.     HGLOBAL hUserSegment;
  297.     HGLOBAL hGDISegment;
  298. } SYSHEAPINFO;
  299.  
  300. BOOL    WINAPI SystemHeapInfo(SYSHEAPINFO FAR* lpSysHeap);
  301.  
  302. /****** Interrupt Handling ****************************************************/
  303.  
  304. /* Hooked interrupts */
  305. #define INT_DIV0            0
  306. #define INT_1               1
  307. #define INT_3               3
  308. #define INT_UDINSTR         6
  309. #define INT_STKFAULT        12
  310. #define INT_GPFAULT         13
  311. #define INT_BADPAGEFAULT    14
  312. #define INT_CTLALTSYSRQ     256
  313.  
  314. /* TOOLHELP Interrupt callbacks registered with InterruptRegister should
  315.  *  always be written in assembly language.  The stack frame is not 
  316.  *  compatible with high level language conventions.
  317.  *
  318.  *  This stack frame looks as follows to the callback.  All registers
  319.  *  should be preserved across this callback to allow restarting fault.
  320.  *               ------------
  321.  *               |   Flags  |  [SP + 0Eh]
  322.  *               |    CS    |  [SP + 0Ch]
  323.  *               |    IP    |  [SP + 0Ah]
  324.  *               |  Handle  |  [SP + 08h]
  325.  *               |Exception#|  [SP + 06h]
  326.  *               |    AX    |  [SP + 04h]  AX Saved to allow MakeProcInstance
  327.  *               |  Ret CS  |  [SP + 02h]
  328.  *       SP--->  |  Ret IP  |  [SP + 00h]
  329.  *               ------------
  330.  */
  331. BOOL    WINAPI InterruptRegister(HTASK hTask, FARPROC lpfnIntCallback);
  332. BOOL    WINAPI InterruptUnRegister(HTASK hTask);
  333.  
  334. /*  Notifications:
  335.  *      When a notification callback is called, two parameters are passed
  336.  *      in:  a WORD, wID, and another DWORD, dwData.  wID is one of
  337.  *      the values NFY_* below.  Callback routines should ignore unrecog-
  338.  *      nized values to preserve future compatibility.  Callback routines
  339.  *      are also passed a dwData value.  This may contain data or may be
  340.  *      a FAR pointer to a structure, or may not be used depending on
  341.  *      which notification is being received.
  342.  *
  343.  *      In all cases, if the return value of the callback is TRUE, the
  344.  *      notification will NOT be passed on to other callbacks.  It has
  345.  *      been handled.  This should be used sparingly and only with certain
  346.  *      notifications.  Callbacks almost always return FALSE.
  347.  */
  348.  
  349. /* NFY_UNKNOWN:  An unknown notification has been returned from KERNEL.  Apps
  350.  *  should ignore these.
  351.  */
  352. #define NFY_UNKNOWN         0
  353.  
  354. /* NFY_LOADSEG:  dwData points to a NFYLOADSEG structure */
  355. #define NFY_LOADSEG         1
  356. typedef struct tagNFYLOADSEG
  357. {
  358.     DWORD dwSize;
  359.     WORD wSelector;
  360.     WORD wSegNum;
  361.     WORD wType;             /* Low bit set if data seg, clear if code seg */
  362.     WORD wcInstance;        /* Instance count ONLY VALID FOR DATA SEG */
  363.     LPCSTR lpstrModuleName;
  364. } NFYLOADSEG;
  365.  
  366. /* NFY_FREESEG:  LOWORD(dwData) is the selector of the segment being freed */
  367. #define NFY_FREESEG         2
  368.  
  369. /* NFY_STARTDLL:  dwData points to a NFYLOADSEG structure */
  370. #define NFY_STARTDLL        3
  371. typedef struct tagNFYSTARTDLL
  372. {
  373.     DWORD dwSize;
  374.     HMODULE hModule;
  375.     WORD wCS;
  376.     WORD wIP;
  377. } NFYSTARTDLL;
  378.  
  379. /* NFY_STARTTASK:  dwData is the CS:IP of the start address of the task */
  380. #define NFY_STARTTASK       4
  381.  
  382. /* NFY_EXITTASK:  The low byte of dwData contains the program exit code */
  383. #define NFY_EXITTASK        5
  384.  
  385. /* NFY_DELMODULE:  LOWORD(dwData) is the handle of the module to be freed */
  386. #define NFY_DELMODULE       6
  387.  
  388. /* NFY_RIP:  dwData points to a NFYRIP structure */
  389. #define NFY_RIP             7
  390. typedef struct tagNFYRIP
  391. {
  392.     DWORD dwSize;
  393.     WORD wIP;
  394.     WORD wCS;
  395.     WORD wSS;
  396.     WORD wBP;
  397.     WORD wExitCode;
  398. } NFYRIP;
  399.  
  400. /* NFY_TASKIN:  No data.  Callback should do GetCurrentTask() */
  401. #define NFY_TASKIN          8
  402.  
  403. /* NFY_TASKOUT:  No data.  Callback should do GetCurrentTask() */
  404. #define NFY_TASKOUT         9
  405.  
  406. /* NFY_INCHAR:  Return value from callback is used.  If NULL, mapped to 'i' */
  407. #define NFY_INCHAR          10
  408.  
  409. /* NFY_OUTSTR:  dwData points to the string to be displayed */
  410. #define NFY_OUTSTR          11
  411.  
  412. /* NFY_LOGERROR:  dwData points to a NFYLOGERROR struct */
  413. #define NFY_LOGERROR        12
  414. typedef struct tagNFYLOGERROR
  415. {
  416.     DWORD dwSize;
  417.     UINT wErrCode;
  418.     void FAR* lpInfo;       /* Error code-dependent */
  419. } NFYLOGERROR;
  420.  
  421. /* NFY_LOGPARAMERROR:  dwData points to a NFYLOGPARAMERROR struct */
  422. #define NFY_LOGPARAMERROR   13
  423. typedef struct tagNFYLOGPARAMERROR
  424. {
  425.     DWORD dwSize;
  426.     UINT wErrCode;
  427.     FARPROC lpfnErrorAddr;
  428.     void FAR* FAR* lpBadParam;
  429. } NFYLOGPARAMERROR;
  430.  
  431. /* NotifyRegister() flags */
  432. #define NF_NORMAL       0
  433. #define NF_TASKSWITCH   1
  434. #define NF_RIP          2
  435.  
  436. typedef BOOL (CALLBACK* LPFNNOTIFYCALLBACK)(WORD wID, DWORD dwData);
  437.  
  438. BOOL    WINAPI NotifyRegister(HTASK hTask, LPFNNOTIFYCALLBACK lpfn, WORD wFlags);
  439. BOOL    WINAPI NotifyUnRegister(HTASK hTask);
  440.  
  441. /****** Miscellaneous *********************************************************/
  442.  
  443. void    WINAPI TerminateApp(HTASK hTask, WORD wFlags);
  444.  
  445. /* TerminateApp() flag values */
  446. #define UAE_BOX     0
  447. #define NO_UAE_BOX  1
  448.  
  449. DWORD   WINAPI MemoryRead(WORD wSel, DWORD dwOffset, void FAR* lpBuffer, DWORD dwcb);
  450. DWORD   WINAPI MemoryWrite(WORD wSel, DWORD dwOffset, void FAR* lpBuffer, DWORD dwcb);
  451.  
  452. typedef struct tagTIMERINFO
  453. {
  454.     DWORD dwSize;
  455.     DWORD dwmsSinceStart;
  456.     DWORD dwmsThisVM;
  457. } TIMERINFO;
  458.  
  459. BOOL    WINAPI TimerCount(TIMERINFO FAR* lpTimer);
  460.  
  461. #ifdef __cplusplus
  462. }
  463. #endif    /* __cplusplus */
  464.  
  465. #ifndef RC_INVOKED
  466. #pragma pack()          /* Revert to default packing */
  467. #endif
  468.  
  469. #endif /* !_INC_TOOLHELP */
  470.